package DAO;

import java.util.List;

import com.sel.modelo.SenhaMd5;
import com.sel.modelo.Usuario;

import android.content.ContentValues;
import android.content.Context;

public class UsuarioDAO extends DAOGeneric<Usuario>
{
    public static final String    TABELA = "usuario";
    public static final String[] COLUNAS = {"id_Usuario", "nome", "email", "data_nascimento", "sexo", "fone", "curso", "cargo", "primeiro_acesso", "status", "login_Usuario", "senha_Usuario", "tipo_Usuario", "campi_idcampi"};
    public static final String SCRIPT_CRIACAO_TABELA_USUARIO = "CREATE TABLE "+ TABELA +"( " +
                                                                    COLUNAS[0]  +" INTEGER PRIMARY KEY," +
                                                                    COLUNAS[1]  +" TEXT NOT NULL," +
                                                                    COLUNAS[2]  +" TEXT UNIQUE NOT NULL, " +
                                                                    COLUNAS[3]  +" TEXT," +
                                                                    COLUNAS[4]  +" TEXT," +
                                                                    COLUNAS[5]  +" TEXT," +
                                                                    COLUNAS[6]  +" INTEGER, " +
                                                                    COLUNAS[7]  +" TEXT, " +
                                                                    COLUNAS[8]  +" INTEGER, " +
                                                                    COLUNAS[9]  +" INTEGER," +
                                                                    COLUNAS[10] +" TEXT, " +
                                                                    COLUNAS[11] +" TEXT, " +
                                                                    COLUNAS[12] +" INTEGER, " +
                                                                    COLUNAS[13] +" INTEGER" +
                                                                    ");";
    public static final String SCRIPT_DELECAO_TABELA_USUARIO = "DROP TABLE IF EXISTS "+TABELA;
    public static UsuarioDAO instance;
    
    public static UsuarioDAO getInstance(Context context) 
    {
        if(instance == null)
        {
            instance = new UsuarioDAO(context);
        }
        return instance;
    }
    
    public UsuarioDAO(Context context) 
    {
        super(context);
    }
    
    @Override
    public String getNomeColunaPrimaryKey() 
    {
        return COLUNAS[0];
    }
    
    @Override
    public String getNomeTabela() 
    {
        return TABELA;
    }
    
    @Override
    public ContentValues entidadeParacontentValues(Usuario usuario) 
    {
        ContentValues values = new ContentValues();
        if (usuario.getId()> 0)
        {
            values.put(COLUNAS[0], usuario.getId());
        }
        values.put(COLUNAS[1], usuario.getNome());
        values.put(COLUNAS[2], usuario.getEmail());
        values.put(COLUNAS[3], usuario.getDataNascimento());
        values.put(COLUNAS[4], usuario.getSexo());
        values.put(COLUNAS[5], usuario.getFone());
        values.put(COLUNAS[6], usuario.getCurso());
        values.put(COLUNAS[7], usuario.getCargo());
        values.put(COLUNAS[8], usuario.getPrimeiroAcesso());
        values.put(COLUNAS[9], usuario.getStatus());
        values.put(COLUNAS[10], usuario.getLogin_Usuario());
        values.put(COLUNAS[11], usuario.getSenha_Usuario());
        values.put(COLUNAS[12], usuario.getTipo_Usuario());
        values.put(COLUNAS[13], usuario.getIdcampi());
        return values;
    }
    
    @Override
    public Usuario contentValuesParaEntidade(ContentValues contentValues) {
        Usuario usuario = new Usuario();
        usuario.setId(contentValues.getAsInteger(COLUNAS[0]));
        usuario.setNome(contentValues.getAsString(COLUNAS[1]));
        usuario.setEmail(contentValues.getAsString(COLUNAS[2]));
        usuario.setDataNascimento(contentValues.getAsString(COLUNAS[3]));
        usuario.setSexo(contentValues.getAsString(COLUNAS[4]));
        usuario.setFone(contentValues.getAsString(COLUNAS[5]));
        usuario.setCurso(contentValues.getAsInteger(COLUNAS[6]));
        usuario.setCargo(contentValues.getAsString(COLUNAS[7]));
        usuario.setPrimeiroAcesso(contentValues.getAsInteger(COLUNAS[8]));
        usuario.setStatus(contentValues.getAsInteger(COLUNAS[9]));
        usuario.setLogin_Usuario(contentValues.getAsString(COLUNAS[10]));
        usuario.setSenha_Usuario(contentValues.getAsString(COLUNAS[11]));
        usuario.setTipo_Usuario(contentValues.getAsInteger(COLUNAS[12]));
        usuario.setIdcampi(contentValues.getAsInteger(COLUNAS[13]));
       return usuario;
    }

    public List<Usuario> buscaDadosUsuario(String login, String senha, Context context) 
    {
        String senhaParaBusca = "";
        if (senha.equals("1234"))
        {
            senhaParaBusca = senha;
        }
        else
        {
            senhaParaBusca = SenhaMd5.hashSenha(senha);
        }
        String query = "SELECT * " +
                         "FROM usuario " +
                        "WHERE email = '"+ login +"' " +
                          "AND senha_Usuario = '"+ senhaParaBusca +"' " +
                          "AND status = " + 0;
        List<Usuario> usuarios =  super.recuperarPorQuery(query);
        this.fecharConexao();
        return usuarios;
    }

    public List<Usuario> buscaAlunosCadastrados() 
    {
        String query = "SELECT * " +
                         "FROM usuario " +
                        "WHERE tipo_Usuario = 3";
        List<Usuario> usuarios =  super.recuperarPorQuery(query);
        this.fecharConexao();
        return usuarios;
    }

    public List<Usuario> buscaUsuariosPorCampi(int idcampi) 
    {
        String query = "SELECT * " +
                         "FROM usuario " +
                   "INNER JOIN campi " +
                           "ON usuario.campi_idcampi = campi.idcampi " +
                        "WHERE idcampi = "+ idcampi +
                         " AND usuario.tipo_Usuario IN (1 , 2)";
        List<Usuario> usuarios = this.recuperarPorQuery(query);
        this.fecharConexao();
        return usuarios;
    }
}
